package main

import "fmt"

// 每个函数都处理一个队列里面的所有数据
// 每个处理方法都要遍历一次队列
func main() {
	// 对队列里的每个数计算 2*x^2 + 6
	p := PipeSlice{1, 2, 3, 4, 5, 6}
	p.pow(2).multiply(2).add(6)

	fmt.Println(p)

}

type PipeSlice []int

// 乘
func (p PipeSlice) multiply(multiplier int) PipeSlice {
	for i := range p {
		p[i] *= multiplier
	}
	return p
}

// 加
func (p PipeSlice) add(additive int) PipeSlice {
	for i := range p {
		p[i] += additive
	}
	return p
}

// 次方
func (p PipeSlice) pow(index int) PipeSlice {
	for i := range p {
		p[i] = power(p[i], index)
	}
	return p
}

func power(data, i int) int {
	if i == 0 {
		return 1
	} else {
		return data * power(data, i-1)
	}
}
